 #define _CRT_SECURE_NO_WARNINGS
#include"game.h"
//菜单
void menu() 
{
	printf("********菜单********\n");
	printf("*****1.开始游戏*****\n");
	printf("*****0.退出游戏*****\n");
	printf("********************\n");
	printf("请选择:");
}
//游戏实现
void play()
{
	char mine[ROWS][LINES] = { 0 };//底层
	char show[ROWS][LINES] = { 0 };//给玩家看的
	//初始化
	Init(show, ROWS, LINES,'*');
	Init(mine, ROWS, LINES, '0');
	//设置地雷
	SetMine(mine, ROW, LINE);//注意范围
	//Print(mine, ROW, LINE);
	Print(show, ROW, LINE);
	//排雷
	CheckMine(mine, show, ROW, LINE);
	//打印
	//Print(show, ROW, LINE);//打印时要注意范围
	//Print(mine, ROW, LINE);
}
//初始化
void Init(char mine[ROWS][LINES], int rows, int lines,char x)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < lines; j++)
		{
			mine[i][j] = x;
		}
	}
}
//打印
void Print(char mine[ROWS][LINES], int row, int line)
{
	//列标 在打印输出地雷界面前先进行输出
	for (int i = 0; i <= ROW; i++)
		printf("%d ", i);
	printf("\n");//注意这个\n别忘记
	for (int i = 1; i <= row; i++)
	{
		//行表在这 因为列表是向下记录的，
		//上一行结束后在 最新一行的第一个 就是列标
		printf("%d ", i);
		for (int j = 1; j <= line; j++)
		{
			printf("%c ", mine[i][j]);
		}
		printf("\n");
	}
}
//设置地雷
void SetMine(char mine[ROWS][LINES], int row, int line)
{
	int count = COUNT;
	int x = 0;
	int y = 0;
	
	//如果没有被设置为地雷就可以设置
	while(count)
	{
		x = 1 + rand() % row;//生成 1~row 的随机数
		y = 1 + rand() % line;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';//设置地雷
			count--;
		}
	}
}
//排雷
void CheckMine(char mine[ROWS][LINES], char show[ROWS][LINES], int row, int line)
{
	int sum = (row * line - COUNT);//除了雷之外的个数
	int x = 0;
	int y = 0;
	while (sum)
	{
		printf("请输入你想排查的坐标：");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x <= ROW && y >= 1 && y <= LINE)
		{
			//底层设置的二维数组 不是0就是1，1是地雷
			if (mine[x][y] == '1')
			{
				show[x][y] = '1';
				printf("很遗憾，你被炸死了...\n");
				Print(mine, ROW, LINE);
				break;
			}
			else
			{
				if (show[x][y] == '*')
				{

					//查找附近有多少雷
					int num=ShowNum(mine,x,y);
					show[x][y] = num+'0';
					sum--;
					printf("请继续：\n");
					Print(show, ROW, LINE);
				}
				else
				{
					printf("请不要重复输入！\n");
				}
			}
		}
		else
		{
			printf("请输入正确的坐标！\n");
		}
	}
	if (sum == 0)
		printf("恭喜你排雷成功！\n");
}
//查找附近有多少雷
int ShowNum(char mine[ROWS][LINES], int x, int y)
{
	int n = 0;
	//'0'=48
	return n = mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] +
		mine[x - 1][y] + mine[x + 1][y] + mine[x - 1][y + 1] +
		mine[x][y + 1] + mine[x + 1][y + 1]-(8*'0');
}